#include <QCoreApplication>
#include <QDebug>
#include <QThread>
#include <QTimer>
#include "mytask.h"
 
int main(int argc, char** argv) {
    QCoreApplication app(argc, argv); //主事件循环
 
    qDebug() << "主线程对象:" << QThread::currentThread();
 
    auto thread = new QThread;
    qDebug() << "新线程对象:" << thread;
    qDebug() << "新线程对象所属线程:" << thread->thread();
    thread->start(); //启动新线程，默认进入线程的事件循环
 
    auto task = new MyTask; //创建任务对象，默认输入当前线程(主线程)
    task->moveToThread(thread); //将任务对象移动到新线程
    qDebug() << "任务对象所属线程:" << task->thread();
 
    qDebug() << "直接调用线程任务";
    task->doWork(); //槽函数直接在主线程中运行
 
    //关联started信号和doWork槽(关联类型为自动关联)通过started信号触发线程任务
    QObject::connect(task, &MyTask::started, task, &MyTask::doWork);
 
    qDebug() << "通过start函数触发started信号";
    task->start();  //主线程触发，接收对象task在新线程，关联类型实际为队列关联，槽函数将在新线程中执行。
 
    qDebug() << "直接触发started信号";
    task->started();  //同上
 
    return app.exec();
}
